package com.bz.common;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.regex.Pattern;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class ToolsUtils {
    /**
     * TODO 除法运算，保留小数
     * 
     * @author 袁忠明
     * @date 2018-4-17下午2:24:48
     * @param a
     *            被除数
     * @param b
     *            除数
     * @return 商
     */
    public static String txfloat(double a, double b) {
        if (b == 0) {
            return "";
        }
        DecimalFormat df = new DecimalFormat("0.00");// 设置保留位数
        return df.format((float) a / b);
    }

    public static Double txDouble(double a, double b) {
        if (b == 0) {
            return 0.00;
        }
        DecimalFormat df = new DecimalFormat("0.00");// 设置保留位数
        return Double.valueOf(df.format((float) a / b));
    }

    public static Double txDouble(double a) {
        DecimalFormat df = new DecimalFormat("0.00");// 设置保留位数
        return Double.valueOf(df.format(a));
    }

    public static String todadtaString(Double a) {
        if (a == null) {
            return null;
        }
        return a.toString();
    }

    public static String todadtaString(BigDecimal a) {
        if (a == null) {
            return null;
        }
        return a.setScale(2, RoundingMode.DOWN).toPlainString();
    }

    /**
     * 转换成int
     * 
     * @param i
     * @return
     */
    public static int getInt(Object i) {
        if (i == null) {
            return 0;
        }
        // return ((Number) i).intValue();
        return (int) Double.parseDouble(i.toString());
    }

    /**
     * 转换成int
     * 
     * @param i
     * @return
     */
    public static long getLong(Object i) {
        if (i == null) {
            return 0;
        }
        return Long.valueOf(String.valueOf(i));
    }

    /**
     * 转换成Double
     * 
     * @param i
     * @return
     */
    public static double getDouble(Object i) {
        if (i == null) {
            return 0.0;
        }
        DecimalFormat df = new DecimalFormat("0.00");// 设置保留位数
        return Double.valueOf(df.format(i));
    }
    /**
     * 转换成Double
     * 
     * @param i
     * @return
     */
    public static double getDoubleObject(Object i) {
        if (i == null) {
            return 0.0;
        }
        return Double.valueOf(String.valueOf(i));
    }

    public static String getString(Object i) {
        if (i == null) {
            return null;
        }
        return String.valueOf(i);
    }

    /**
     * 转换成Double
     * 
     * @param i
     * @return
     */
    public static Double getDouble(String i) {
        if (i == null) {
            return 0.0;
        }
        try {
            return Double.valueOf(i);
        } catch (Exception e) {
            LogUtils.error(log, e, "告警数据转换失败,i:" + i);
        }
        return null;
    }

    public static Integer getAgeByBirth(Date birthday) {
        if (null == birthday) {
            return null;
        }

        // Calendar：日历
        /* 从Calendar对象中或得一个Date对象 */
        Calendar cal = Calendar.getInstance();
        /* 把出生日期放入Calendar类型的bir对象中，进行Calendar和Date类型进行转换 */
        Calendar bir = Calendar.getInstance();
        bir.setTime(birthday);
        /* 如果生日大于当前日期，则抛出异常：出生日期不能大于当前日期 */
        if (cal.before(birthday)) {
            return 0;
        }
        /* 取出当前年月日 */
        int yearNow = cal.get(Calendar.YEAR);
        int monthNow = cal.get(Calendar.MONTH);
        int dayNow = cal.get(Calendar.DAY_OF_MONTH);
        /* 取出出生年月日 */
        int yearBirth = bir.get(Calendar.YEAR);
        int monthBirth = bir.get(Calendar.MONTH);
        int dayBirth = bir.get(Calendar.DAY_OF_MONTH);
        /* 大概年龄是当前年减去出生年 */
        int age = yearNow - yearBirth;
        /* 如果出当前月小与出生月，或者当前月等于出生月但是当前日小于出生日，那么年龄age就减一岁 */
        if (monthNow < monthBirth || (monthNow == monthBirth && dayNow < dayBirth)) {
            age--;
        }
        return age;
    }

    public static boolean isChineseCharacter(String str) {
        String regex = "[\u4e00-\u9fa5]";
        Pattern pattern = Pattern.compile(regex);
        return pattern.matcher(str).find();
    }

    /**
     * 转换成int
     * 
     * @param i
     * @return
     */
    public static double getPre(int total, int pre) {
        if (total == 0) {
            return 0;
        }
        DecimalFormat df = new DecimalFormat("0.00");// 设置保留位数
        return Double.valueOf(df.format((float) (pre * 100) / total));
    }

    public static double getPre(Long total, Long pre) {
        if (total == 0) {
            return 0;
        }
        DecimalFormat df = new DecimalFormat("0.00");// 设置保留位数
        return Double.valueOf(df.format((float) (pre * 100) / total));
    }
}
